'\" t
.\"     Title: vgdb
.\"    Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\"      Date: 04/13/2019
.\"    Manual: Release 3.15.0
.\"    Source: Release 3.15.0
.\"  Language: English
.\"
.TH "VGDB" "1" "04/13/2019" "Release 3.15.0" "Release 3.15.0"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
vgdb \- intermediary between Valgrind and GDB or a shell
.SH "SYNOPSIS"
.HP \w'\fBvgdb\fR\ 'u
\fBvgdb\fR [\fIoptions\fR]
.SH "DESCRIPTION"
.PP
\fBvgdb\fR
("Valgrind to GDB") is used as an intermediary between Valgrind and GDB or a shell\&. It has two usage modes:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  1." 4.2
.\}
As a standalone utility, it is used from a shell command line to send monitor commands to a process running under Valgrind\&. For this usage, the vgdb OPTION(s) must be followed by the monitor command to send\&. To send more than one command, separate them with the
\fB\-c\fR
option\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP "  2." 4.2
.\}
In combination with GDB "target remote |" command, it is used as the relay application between GDB and the Valgrind gdbserver\&. For this usage, only OPTION(s) can be given, but no COMMAND can be given\&.
.RE
.SH "OPTIONS"
.PP
\fB\-\-pid=<number>\fR
.RS 4
Specifies the PID of the process to which vgdb must connect to\&. This option is useful in case more than one Valgrind gdbserver can be connected to\&. If the
\fB\-\-pid\fR
argument is not given and multiple Valgrind gdbserver processes are running, vgdb will report the list of such processes and then exit\&.
.RE
.PP
\fB\-\-vgdb\-prefix\fR
.RS 4
Must be given to both Valgrind and vgdb if you want to change the default prefix for the FIFOs (named pipes) used for communication between the Valgrind gdbserver and vgdb\&.
.RE
.PP
\fB\-\-wait=<number>\fR
.RS 4
Instructs vgdb to search for available Valgrind gdbservers for the specified number of seconds\&. This makes it possible start a vgdb process before starting the Valgrind gdbserver with which you intend the vgdb to communicate\&. This option is useful when used in conjunction with a
\fB\-\-vgdb\-prefix\fR
that is unique to the process you want to wait for\&. Also, if you use the
\fB\-\-wait\fR
argument in the GDB "target remote" command, you must set the GDB remotetimeout to a value bigger than the \-\-wait argument value\&. See option
\fB\-\-max\-invoke\-ms\fR
(just below) for an example of setting the remotetimeout value\&.
.RE
.PP
\fB\-\-max\-invoke\-ms=<number>\fR
.RS 4
Gives the number of milliseconds after which vgdb will force the invocation of gdbserver embedded in Valgrind\&. The default value is 100 milliseconds\&. A value of 0 disables forced invocation\&. The forced invocation is used when vgdb is connected to a Valgrind gdbserver, and the Valgrind process has all its threads blocked in a system call\&.
.sp
If you specify a large value, you might need to increase the GDB "remotetimeout" value from its default value of 2 seconds\&. You should ensure that the timeout (in seconds) is bigger than the
\fB\-\-max\-invoke\-ms\fR
value\&. For example, for
\fB\-\-max\-invoke\-ms=5000\fR, the following GDB command is suitable:
.sp
.if n \{\
.RS 4
.\}
.nf
    (gdb) set remotetimeout 6
    
.fi
.if n \{\
.RE
.\}
.sp
.RE
.PP
\fB\-\-cmd\-time\-out=<number>\fR
.RS 4
Instructs a standalone vgdb to exit if the Valgrind gdbserver it is connected to does not process a command in the specified number of seconds\&. The default value is to never time out\&.
.RE
.PP
\fB\-\-port=<portnr>\fR
.RS 4
Instructs vgdb to use tcp/ip and listen for GDB on the specified port nr rather than to use a pipe to communicate with GDB\&. Using tcp/ip allows to have GDB running on one computer and debugging a Valgrind process running on another target computer\&. Example:
.sp
.if n \{\
.RS 4
.\}
.nf
# On the target computer, start your program under valgrind using
valgrind \-\-vgdb\-error=0 prog
# and then in another shell, run:
vgdb \-\-port=1234
.fi
.if n \{\
.RE
.\}
.sp
On the computer which hosts GDB, execute the command:
.sp
.if n \{\
.RS 4
.\}
.nf
gdb prog
(gdb) target remote targetip:1234
.fi
.if n \{\
.RE
.\}
.sp
where targetip is the ip address or hostname of the target computer\&.
.RE
.PP
\fB\-c\fR
.RS 4
To give more than one command to a standalone vgdb, separate the commands by an option
\fB\-c\fR\&. Example:
.sp
.if n \{\
.RS 4
.\}
.nf
vgdb v\&.set log_output \-c leak_check any
.fi
.if n \{\
.RE
.\}
.RE
.PP
\fB\-l\fR
.RS 4
Instructs a standalone vgdb to report the list of the Valgrind gdbserver processes running and then exit\&.
.RE
.PP
\fB\-D\fR
.RS 4
Instructs a standalone vgdb to show the state of the shared memory used by the Valgrind gdbserver\&. vgdb will exit after having shown the Valgrind gdbserver shared memory state\&.
.RE
.PP
\fB\-d\fR
.RS 4
Instructs vgdb to produce debugging output\&. Give multiple
\fB\-d\fR
args to increase the verbosity\&. When giving
\fB\-d\fR
to a relay vgdb, you better redirect the standard error (stderr) of vgdb to a file to avoid interaction between GDB and vgdb debugging output\&.
.RE
.SH "SEE ALSO"
.PP
valgrind(1),
$INSTALL/share/doc/valgrind/html/index\&.html
or
http://www\&.valgrind\&.org/docs/manual/index\&.html,
\m[blue]\fBDebugging your program using Valgrind\*(Aqs gdbserver and GDB\fR\m[]\&\s-2\u[1]\d\s+2
\m[blue]\fBvgdb\fR\m[]\&\s-2\u[2]\d\s+2,
\m[blue]\fBValgrind monitor commands\fR\m[]\&\s-2\u[3]\d\s+2\&.
.SH "AUTHOR"
.PP
Philippe Waroquiers\&.
.SH "NOTES"
.IP " 1." 4
Debugging your program using Valgrind's gdbserver and GDB
.RS 4
\%http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver
.RE
.IP " 2." 4
vgdb
.RS 4
\%http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.vgdb
.RE
.IP " 3." 4
Valgrind monitor commands
.RS 4
\%http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.valgrind-monitor-commands
.RE
